package com.xpq.ddns;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 获取DDNSProperties配置信息启动动态域名解析
 */
@Slf4j
@Component
public class DDNSStarter {
    @Autowired
    private DDNSProperties ddnsProperties;

    public void start() {
        // 检查参数
        if(!checkDDNSConfig(ddnsProperties)) {
            return;
        }
        DDNS.Info info = new DDNS.Info();
        info.setAccessKeyId(ddnsProperties.getAccessKeyId());
        info.setAccessKeySecret(ddnsProperties.getAccessKeySecret());
        info.setRegionId(ddnsProperties.getRegionId());
        info.setRecordType(ddnsProperties.getRecordType());
        info.setCurrentHostIP(ddnsProperties.getIp());

        DDNS ddns = new DDNS();
        // 把所有配置的域名主机记录都进行修改
        for (int i = 0; i < ddnsProperties.getDomains().size(); i++) {
            info.setDomainName(ddnsProperties.getDomains().get(i).getDomainName());
            for (int j = 0; j < ddnsProperties.getDomains().get(i).getHosts().size(); j++) {
                info.setRR(ddnsProperties.getDomains().get(i).getHosts().get(j));
                ddns.update(info);
            }
        }
    }

    /**
     * 检测 ddnsConfig 配置
     * @param ddnsProperties
     * @return
     */
    private static boolean checkDDNSConfig(DDNSProperties ddnsProperties) {
        if (ddnsProperties.getAccessKeyId() == null) {
            log.error("accessKeyId不能为空");
            return false;
        }
        if (ddnsProperties.getAccessKeySecret() == null) {
            log.error("accessKeySecret不能为空");
            return false;
        }
        // 域名不能为空
        if(ddnsProperties.getDomains() == null || ddnsProperties.getDomains().size() == 0) {
            log.error("域名不能为空");
            return false;
        }
        // 主机不能为空
        for (int i = 0; i < ddnsProperties.getDomains().size(); i++) {
            if(ddnsProperties.getDomains().get(i).getHosts() == null || ddnsProperties.getDomains().get(i).getHosts().size() == 0) {
                log.error("主机记录不能为空");
                return false;
            }
        }
        return true;
    }
}
